﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SingletonPattern
{
    /// <summary>
    /// 延迟初始化
    /// </summary>
    /// <remarks>
    /// 把初始化工作放到Nested类中的一个静态成员来完成，这样就实现了延迟初始化。
    /// </remarks>
    public sealed class NestedSingleton
    {
        // 定义私有构造函数，使外界不能创建该类实例
        private NestedSingleton()
        {
        }

        /// <summary>
        ///  定义公有属性来提供一个全局访问点,同时你也可以定义公有方法来提供全局访问点
        /// </summary>
        public static NestedSingleton Instance { get { return Nested._instance; } }

        /// <summary>
        /// 内部私有类
        /// </summary>
        private class Nested
        {
            // Explicit static constructor to tell C# compiler
            // not to mark type as beforefieldinit
            static Nested()
            {
            }

            // 定义一个静态变量来保存类的实例
            internal static readonly NestedSingleton _instance = new NestedSingleton();
        }
    }
}
